//工程环境预设值
import HashMap from '@ohos.util.HashMap'
import deviceInfo from '@ohos.deviceInfo'

export enum Environment {
  PRODUCTION, // 线上环境
  TESTING, // 测试环境
  PRE, // 预发布
}

//内容类型
export enum ContentType {
  JSON = 'application/json',
  FORM = 'application/x-www-form-urlencoded',
}

//默认的请求内容类型
export let defContentType = ContentType.JSON

//工程环境配置
export let env = Environment.PRODUCTION

//http协议
export let httpHeader = (env == Environment.PRODUCTION) ? "https://" : ((env == Environment.TESTING) ? "https://" : "")
// export let httpHeader = (env == Environment.PRODUCTION) ? "https://" : ((env == Environment.TESTING) ? "https://" : "")

//主域名,不同的域名请求时直接使用全路径
// export let domainName = (env == Environment.PRODUCTION) ? "10.0.3.160:8080/" : ((env == Environment.TESTING) ? "zsrbappdev.zsnews.cn" : "")
// export let domainName = (env == Environment.PRODUCTION) ? "26h7870k86.vicp.fun" : ((env == Environment.TESTING) ? "zsrbappdev.zsnews.cn" : "")
export let domainName = (env == Environment.PRODUCTION) ? "zsrbapp.zsnews.cn" : ((env == Environment.TESTING) ? "zsrbappdev.zsnews.cn" : "")

//Api版本号
export let apiVersion = "25"

//公共请求头
export class Herder {
  Content_Type: string = 'application/json'
  apiVersion: string = apiVersion
}

// 拼接域名前缀
export function urlInspect(value: string): string {
  if (value == null) {
    return ""
  }
  if (value.startsWith("http") || value.startsWith("https")) {
    return value
  }
  console.info('http quest url:' + httpHeader + domainName + value);
  return httpHeader + domainName + value
}

class FormData {
  url: string
  header: Object
  contentType: string
  body: Object
}

/**
 * 构建 FormData 对象，根据给定的内容类型将内容转换为对应的格式并填充到 FormData 中。
 *
 * @param content - 要填充到 FormData 的内容对象。对于不同 contentType，处理方式不同：
 *   - 当 contentType 为 JSON 时，内容应为可 JSON 序列化的对象。
 *   - 当 contentType 为 FORM 时，内容应为键值对形式的对象。
 *
 * @param contentType - 内容的类型，默认值由 `defContentType` 提供。
 *   可选值：
 *   - ContentType.JSON: 将内容作为 JSON 字符串添加，并设置正确的 Content-Type。
 *   - ContentType.FORM: 将内容编码为 "application/x-www-form-urlencoded" 格式字符串。
 *
 * @returns 新构建的 FormData 实例，已包含经过适当格式化的内容。
 */
export function buildFormData(url: string, content: Object, contentType?: ContentType, headerData?: HashMap<string, Object>): FormData {
  let formData = new FormData()

  formData.url = urlInspect(url)

  // 设置默认 contentType 如果未提供
  if (!contentType) {
    contentType = defContentType
    if (!content) {
      contentType = ContentType.JSON
    }
  }
  // 初始化 formData 的 body 属性
  formData.body = ''

  // 根据 contentType 处理内容
  if (contentType == ContentType.JSON) {
    formData.contentType = "application/json"
    // 将内容对象转化为 JSON 字符串并赋值给 body
    formData.body = content
  } else if (contentType == ContentType.FORM) {
    formData.contentType = "application/x-www-form-urlencoded"
    // 遍历内容对象，将其转换为 "key=value&key2=value2" 形式的字符串
    Object.entries(content).forEach(([key, value], index) => {
      if (index > 0) {
        formData.body += '&'
      }
      if (value !== undefined && value !== null) {
        formData.body += key + '=' + encodeURIComponent(String(value))
      }
    });
  }

  let header = {
    'content-type': formData.contentType,
    'apiVersion': apiVersion,
    'deviceId': 'ohos@13923336173',
    'versionName': '8.0.14.0',
  }
  let osName: string = deviceInfo.osFullName;
  if (osName.startsWith('OpenHarmony')) {
    // OpenHarmony应用平台上业务逻辑
    header['os'] = 'OpenHarmony'
  } else if (osName.startsWith('Android')) {
    // Android应用平台上业务逻辑
    header['os'] = 'Android'
  } else if (osName.startsWith('iOS')) {
    // iOS应用平台上业务逻辑
    header['os'] = 'iOS'
  }
  if (headerData) {
    headerData.forEach((v, k, m) => {
      header[k] = v
    })
  }
  formData.header = header

  // 返回填充好的 FormData 对象
  return formData
}